'''
在业务类实践中，由于封装性的考虑，类的一些方法不能被外部使用，
比如：启动汽车操作应该使用“用钥匙发动”的方法来启动汽车，而不是用“用连接线路点火”的底层方法来启动汽车
出于这一目的，为了防止误用，在定义类时，应该通过控制访问权限的方式来限制某些方法和属性被外部调用
_xx：表示protected变量和方法，只能在本类和子类中访问
__xx：表示private变量和方法，只能在本类中访问 
'''
class Car:
  def __init__(self, owner, price) -> None:
    self.owner = owner
    self.__price = price
  def __engineStart(self):
    print('Engine Start')
  def start(self):
    print('Car Start')
    self.__engineStart()
  def get_price(self):
    return self.__price
  
byd = Car('Alice', 30000)
byd.start()
# byd.__engineStart() # error
# print(byd.__price) # error
# byd.get_price()

byd.__price = 99999
byd.get_price() # 上面改成99999了，但访问时却没有变？原因：Python会将私有变量自动改一个名字
print(byd)